/*
 * ServerThread.h
 *
 * Author: Grupo Nro.
 */

#ifndef SERVERTHREAD_H_
#define SERVERTHREAD_H_

#include <vector>
#include <map>
#include <queue>
#include "JugadorConectado.h"
#include "Thread.h"
#include "JugadorThreadRecepcion.h"
#include "JugadorThreadEnvio.h"
#include "MensajeGeneral.h"
#include "ServerSocket.h"
#include "ComunicacionException.h"

using std::vector;
using std::queue;

class ServerThread: public Thread {
private:
	int IDPartidaSecuencia;
	vector<JugadorConectado *> jugadoresConectados;
	vector<Partida *> partidasEnCurso;
	vector<Campania *> campaniasDisponibles;
	ServerSocket * serverSocket;
	ServerSocket * serverSocketEnvio;
	int players_id_counter;

	void finalizar();
	void bootstrap();

public:
	ServerThread(Mutex * mutex, ServerSocket * serverSocket, ServerSocket * serverSocketEnvio);
	virtual ~ServerThread();
	void run();
	vector<JugadorConectado *> & getJugadoresConectados();
	void agregarNuevaPartida(Partida* p);
	vector<Campania *> getCampanias();
	// Devuelve un ID unico para la partida
	int getSiguienteIDPartida();
	vector<Partida *> getPartidasExistentes();
	Partida* getPartidaPorID(int id);
};

#endif /* SERVERTHREAD_H_ */
